#include "bsp_iic.h"


/**
 * @description: IIC通信延时
 * @return {*}
 */
static void bsp_iic_delay(void)
{
	uint8_t t=3;
	while(t--);
}

/**
 * @description: 发送IIC起始信号
 * @return {*}
 */
void bsp_iic_start(void)
{
	IIC_SDA_HIGH();
	IIC_SCL_HIGH();
	bsp_iic_delay();
	IIC_SDA_LOW();
	bsp_iic_delay();
	IIC_SCL_LOW();
	bsp_iic_delay();
}

/**
 * @description: 发送IIC结束信号
 * @return {*}
 */
void bsp_iic_stop(void)
{
	IIC_SDA_LOW();
	IIC_SCL_HIGH();
	bsp_iic_delay();
	IIC_SDA_HIGH();
}

/**
 * @description: IIC通信应答等待
 * @return {*}
 */
void bsp_iic_wait(void) //测数据信号的电平
{
	IIC_SDA_HIGH();
	bsp_iic_delay();
	IIC_SCL_HIGH();
	bsp_iic_delay();
	IIC_SCL_LOW();
	bsp_iic_delay();
}

/**
 * @description: IIC通信发送一个字节
 * @return {*}
 */
void bsp_iic_send_byte(uint8_t dat)
{
	uint8_t i;
	for(i=0;i<8;i++)
	{
		if(dat&0x80)//将dat的8位从最高位依次写入
		{
			IIC_SDA_HIGH();
    }
		else
		{
			IIC_SDA_LOW();
    }
		bsp_iic_delay();
		IIC_SCL_HIGH();
		bsp_iic_delay();
		IIC_SCL_LOW();//将时钟信号设置为低电平
		dat<<=1;
  }
}

/**
 * @description: IIC发送一个字节数据/命令
 * @param {uint8_t} dat
 * @param {uint8_t} mode-数据/命令标志
 * @return {*}
 */
void bsp_iic_send(uint8_t dat,uint8_t mode)
{
	bsp_iic_start();
	bsp_iic_send_byte(0x78);
	bsp_iic_wait();
	if(mode)
		bsp_iic_send_byte(0x40);
  	else
		bsp_iic_send_byte(0x00);
	bsp_iic_wait();
	bsp_iic_send_byte(dat);
	bsp_iic_wait();
	bsp_iic_stop();
}



